package cn.baddonkey.photography.agent.service;

import cn.baddonkey.photography.agent.core.PageData;
import cn.baddonkey.photography.agent.entity.dto.LoginBody;
import cn.baddonkey.photography.agent.entity.dto.LoginUser;
import cn.baddonkey.photography.agent.entity.dto.UserInfoPageDto;
import cn.baddonkey.photography.agent.entity.dto.UserUpdateDto;
import cn.baddonkey.photography.agent.entity.vo.UserInfoVo;

/** 用户信息服务接口 定义了用户相关的核心业务操作 */
public interface UserInfoService {

    /**
     * 获取当前用户信息
     *
     * @return 用户信息视图对象
     */
    UserInfoVo info();

    /**
     * 分页获取用户列表
     *
     * @param userInfoPageDto
     *            用户分页查询参数
     * @return 分页用户数据
     */
    PageData<UserInfoVo> list(UserInfoPageDto userInfoPageDto);

    /**
     * 用户登录
     *
     * @param loginBody
     *            登录参数
     * @return 登录用户信息
     */
    LoginUser login(LoginBody loginBody);

    /**
     * 根据用户ID数组删除用户
     *
     * @param userIds
     *            用户ID数组
     */
    void deleteUserByIds(String[] userIds);

    /**
     * 重置用户密码
     *
     * @param dto
     *            用户更新信息
     */
    void resetPwd(UserUpdateDto dto);

    /**
     * 更新用户状态
     *
     * @param dto
     *            用户更新信息
     */
    void updateUserStatus(UserUpdateDto dto);

    /**
     * 检查手机号唯一性
     *
     * @param user
     *            用户信息
     * @return 手机号是否唯一
     */
    boolean checkPhoneUnique(UserUpdateDto user);

    /**
     * 检查邮箱唯一性
     *
     * @param user
     *            用户信息
     * @return 邮箱是否唯一
     */
    boolean checkEmailUnique(UserUpdateDto user);

    /**
     * 检查用户名唯一性
     *
     * @param user
     *            用户信息
     * @return 用户名是否唯一
     */
    boolean checkUserNameUnique(UserUpdateDto user);

    /**
     * 更新用户信息
     *
     * @param user
     *            用户更新信息
     */
    void updateUser(UserUpdateDto user);

    /**
     * 新增用户信息
     *
     * @param user
     *            新增信息
     */
    int insertUser(UserUpdateDto user);
}
